package us.kg.kotoriforest.rr;

import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import java.io.IOException;
import java.util.Enumeration;

@WebServlet("/rr/servlet1")
public class Servlet1 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println(req.getMethod()); // 获取请求方法
        /*
         * uri(统一资源标识符) 和 url 的区别是(统一资源定位符)
         *   uri 是没有协议、ip、端口的 url
         *   直接从 webapp 的根目录开始
         *   是项目内的资源路径
         *
         * uri 是一种资源定位的要求和规范
         * url 是在协议下 对 uri 的具体实现
         * */
        System.out.println(req.getRequestURI()); // 获取请求的资源的 uri
        System.out.println(req.getRequestURL()); // 获取请求的资源的 url
        System.out.println(req.getProtocol()); // 获取请求的协议及其版本号
        System.out.println(req.getScheme()); // 获取请求的协议
        System.out.println(req.getLocalPort()); // 本 servlet 容器的端口号（tomcat 的端口号）
        System.out.println(req.getServerPort()); // 客户端发起请求时 请求的服务器的端口号 (LocalPort 和 ServerPort 有可能不同 如存在反向代理时)
        System.out.println(req.getRemotePort()); // 客户端的端口号

        // getHeader 是根据 key(属性) 值来获取请求头中的相应字段
        System.out.println(req.getHeader("Content-Type")); // 客户端发来的请求中其实也可能会有 Content-Type 属性
        System.out.println(req.getHeader("Cookie"));
        System.out.println(req.getHeader("Host"));

        System.out.println("-----------------------------------");
        // 获取本次请求中所有的请求头属性
        Enumeration<String> headerNames = req.getHeaderNames();
        while (headerNames.hasMoreElements()) {
            String headerName = headerNames.nextElement();
            System.out.println(headerName + ": " + req.getHeader(headerName));
        }
    }
}
